############################################################################
#
# Makefile für das LCV Framework inklusive Programm
#
# Autoren: Daniel Kummer, Sebastian Kummer
# 
############################################################################

# Der Programmname, dem Programmnamen wird ein Zielsystemabhängiges Suffix angehängt
EXEC = prog
HOST_SUFFIX = _host
TARGET_SUFFIX = _target

# Defines für C Dateien
TARGET_FEATURES += -DLCV_TARGET
HOST_FEATURES += -DLCV_HOST

# Alle Dateien im aktuellen Verzeichnis werden mitkompiliert
SOURCES := $(wildcard *.c)
OBJS := $(patsubst %.c, %.o, $(SOURCES))

# Module des LCV Frameworks
LCV_SOURCES_TARGET = lcv/cam-target.c lcv/i2c.c lcv/log.c lcv/gpio-target.c lcv/bayer-lcv.c lcv/bmp.c lcv/dip.c
LCV_OBJS_TARGET = cam-target.o i2c.o log.o gpio-target.o bayer-lcv.o bmp.o dip.o

LCV_SOURCES_HOST = lcv/cam-linux32.c lcv/log.c lcv/gpio-linux32.c lcv/bmp.c lcv/dip.c
LCV_OBJS_HOST = cam-linux32.o log.o gpio-linux32.o bmp.o dip.o

# Der Host Compiler
CC = gcc 
CFLAGS = $(HOST_FEATURES) -O2

# Der Target Crosscompiler
BFINCC = bfin-uclinux-gcc 
BFINCFLAGS = $(TARGET_FEATURES) -ggdb3 -Wl,-elf2flt

# Target für die Kernelkompilierung
all: $(EXEC)

$(EXEC): target
	
target: cam-api-target projekt_files_target
	$(BFINCC) $(BFINCFLAGS) -o  $(EXEC)$(TARGET_SUFFIX) $(LCV_OBJS_TARGET) $(OBJS)
	@echo "target executable created"
	
host: cam-api-linux32 projekt_files_host
	$(CC) $(CFLAGS) -o $(EXEC)$(HOST_SUFFIX) $(LCV_OBJS_HOST) $(OBJS)
	@echo "host executable created"

projekt_files_target: $(SOURCES)
	$(BFINCC) $(BFINCFLAGS) -c $(SOURCES)

projekt_files_host: $(SOURCES)
	$(CC) $(CFLAGS) -c $(SOURCES)

cam-api-target: $(LCV_SOURCES_TARGET)
	$(BFINCC) $(BFINCFLAGS) -c $(LCV_SOURCES_TARGET)

cam-api-linux32: $(LCV_SOURCES_HOST)
	$(CC) $(CFLAGS) -c $(LCV_SOURCES_HOST)

# Installationsdirektive für die Kernelkompilierung
romfs:
	$(ROMFSINST)    /bin/$(EXEC)$(TARGET_SUFFIX)

clean:		
	-rm -f *.o *.elf *.gdb *~ prog_host prog_target
	@echo "directory cleaned"

